package com.power.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.power.constant.ProductConstants;
import com.power.domain.ProdTag;
import com.power.mapper.ProdTagMapper;
import com.power.service.ProdTagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
* @author dingchunlin
* @description 针对表【prod_tag(商品分组表)】的数据库操作Service实现
* @createDate 2024-07-10 15:12:14
*/
@Service
@CacheConfig(cacheNames = "com.power.service.impl.ProdTagServiceImpl")
public class ProdTagServiceImpl extends ServiceImpl<ProdTagMapper, ProdTag> implements ProdTagService{

    @Autowired
    private ProdTagMapper prodTagMapper;

    /**
     * 保存商品分组
     * @param prodTag 商品分组
     * @return 是否保存成功
     */
    @Override
    @Caching(evict = {
            @CacheEvict(key = ProductConstants.PROD_TAG_NORMAL_LIST),
            @CacheEvict(key = ProductConstants.WX_PROD_TAG)
    })
    public Boolean saveProdTag(ProdTag prodTag) {
        prodTag.setCreateTime(new Date());
        prodTag.setUpdateTime(new Date());
        return prodTagMapper.insert(prodTag) > 0;
    }

    /**
     * 修改商品分组
     * @param prodTag 商品分组
     * @return 是否修改成功
     */
    @Override
    @Caching(evict = {
            @CacheEvict(key = ProductConstants.PROD_TAG_NORMAL_LIST),
            @CacheEvict(key = ProductConstants.WX_PROD_TAG)
    })
    public Boolean modifyProdTag(ProdTag prodTag) {
        prodTag.setUpdateTime(new Date());
        return prodTagMapper.updateById(prodTag) > 0;
    }

    /**
     * 删除商品分组
     * @param id 商品分组id
     * @return 是否删除成功
     */
    @Override
    @Caching(evict = {
            @CacheEvict(key = ProductConstants.PROD_TAG_NORMAL_LIST),
            @CacheEvict(key = ProductConstants.WX_PROD_TAG)
    })
    public Boolean removeProdTag(Long id) {
        return prodTagMapper.deleteById(id) > 0;
    }

    /**
     * 查询状态正常商品分组标签
     * @return 商品分组列表
     */
    @Override
    @Cacheable(key = ProductConstants.PROD_TAG_NORMAL_LIST)
    public List<ProdTag> queryProdTagList() {
        LambdaQueryWrapper<ProdTag> lambdaQueryWrapper = new LambdaQueryWrapper<ProdTag>();
        lambdaQueryWrapper.eq(ProdTag::getStatus, 1);
        lambdaQueryWrapper.orderByAsc(ProdTag::getSeq);
        List<ProdTag> prodTagList = prodTagMapper.selectList(lambdaQueryWrapper);
        return prodTagList;
    }

    /**
     * 查询微信端商品分组标签
     *
     * @return 商品分组列表
     */
    @Override
    @Cacheable(key = ProductConstants.WX_PROD_TAG)
    public List<ProdTag> queryWxProdTagList() {
        LambdaQueryWrapper<ProdTag> lambdaQueryWrapper = new LambdaQueryWrapper<ProdTag>();
        lambdaQueryWrapper.eq(ProdTag::getStatus, 1);
        lambdaQueryWrapper.orderByAsc(ProdTag::getSeq);
        List<ProdTag> prodTagList = prodTagMapper.selectList(lambdaQueryWrapper);
        return prodTagList;
    }

}




